import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate


x=[685,856,1027,1198,1370,1541,1712,1883,2055,2226,2397,2568,2826]
y=[0,1.9,11.75,18.2,27.5,36.1,42.3,45.1,47.9,50.1,51.5,52.5,52.7]

'''--------------numpy 数据拟合------------------------'''
""" p=np.polyfit(x,y,5) #5次多项式拟合
f=np.polyval(p,x)   #（拟合出的y值）x是给定的x值,p是拟合的函数
print(f) #Y就是拟合的值
# 画图
plt.scatter(x, f, s=60, color='red', marker='o', zorder=3)
plt.plot(x, y)
plt.show() """




'''------------------scipy 曲线拟合-------------------------------'''
#插值法之后的x轴值，表示从0到10间距为0.5的200个数
xnew =np.arange(685,2826,50)
#实现函数
# nearest ：最邻近插值法
# zero ：阶梯插值
# slinear 、 linear ：线性插值
# quadratic 、 cubic ：2、3阶B样条曲线插值
func = interpolate.interp1d(x,y,kind='cubic')
#利用xnew和func函数生成ynew,xnew数量等于ynew数量
ynew = func(xnew)
print(len(xnew))
print(len(ynew))

# 原始折线
plt.plot(x, y, 'ob-', linewidth=1) #(o圆点，b蓝色,-线段 )
# 平滑曲线
plt.plot(xnew,ynew, '.g-', linewidth=1)
#设置x,y轴代表意思
plt.xlabel("x")
plt.ylabel("y")
plt.title("1") #设置标题
#设置x,y轴的坐标范围
plt.xlim(500,3000,10)
plt.ylim(-10,100)
 
plt.show()
